home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 23 / CU Amiga - Super CD-ROM 23 (June 1998).iso / CreatingGames / Utilities / C / ASAP / object.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-09-09  |  7.0 KB  |  166 lines

  1. /*****************************************************************************
  2.  *                                                                           *
  3.  * ASAP - Amiga Software Authoring Platform                                  *
  4.  *                                                                           *
  5.  * Written by Laurie Perrin                                                  *
  6.  *                                                                           *
  7.  * AObject wrapper class                                                     *
  8.  *                                                                           *
  9.  *****************************************************************************/
  10.  
  11. #ifndef ASAP_Object_H
  12. #define ASAP_Object_H
  13.  
  14. #include <New.h>
  15.  
  16. extern "C"
  17. {
  18.  #include <CLIB/ALIB_PROTOS.h>
  19.  #include <Proto/Intuition.H>
  20. }
  21.  
  22. class AObject : public _Object
  23. {
  24.  public:
  25.  inline static AObject * NextObject(APTR objectPtrPtr);
  26.  inline void DisposeObject();
  27.  inline void operator delete(void *object);
  28.  inline ULONG GetAttr(unsigned long attrID, ULONG *storagePtr);
  29.  inline ULONG SetAttrs(unsigned long tag1, ...);
  30.  inline ULONG SetAttrsA(TagItem *tagList);
  31.  inline ULONG CallHook(Hook *hookPtr, unsigned long arg1 = 0, ...);
  32.  inline ULONG CallHookA(Hook *hookPtr, APTR message);
  33.  inline ULONG DoMethod(unsigned long MethodID, ...);
  34.  inline ULONG DoMethodA(Msg message);
  35.  inline ULONG DoSuperMethod(IClass *cl, unsigned long MethodID, ...);
  36.  inline ULONG DoSuperMethodA(IClass *cl, Msg message);
  37.  inline ULONG CoerceMethod(IClass *cl, unsigned long MethodID, ...);
  38.  inline ULONG CoerceMethodA(IClass *cl, Msg message);
  39.  inline static AObject * NewObject(/* IClass *classPtr,*/ const char  *classID, unsigned long tag1, ... );
  40.  inline void * operator new(size_t, /* IClass *classPtr,*/ const char *classID, unsigned long tag1, ... );
  41.  inline static AObject * NewObject( IClass *classPtr/*, UBYTE *classID*/, unsigned long tag1, ...);
  42.  inline void * operator new(size_t, IClass *classPtr/*, UBYTE *classID*/, unsigned long tag1, ... );
  43.  inline static AObject * NewObjectA(/* IClass *classPtr,*/ const char *classID, TagItem *tagList);
  44.  inline void * operator new(size_t, /* IClass *classPtr,*/ const char *classID, TagItem *tagList);
  45.  inline static AObject * NewObjectA( IClass *classPtr/*, UBYTE *classID*/, TagItem *tagList );
  46.  inline void * operator new(size_t, IClass *classPtr/*, UBYTE *classID*/, TagItem *tagList);
  47.  inline ULONG SetSuperAttrs(IClass *cl, unsigned long Tag1, ... );
  48. };
  49. //-----------------------------------------------------------------------------
  50. AObject * AObject::NextObject (APTR objectPtrPtr)
  51. {
  52.  return (AObject *) ::NextObject(objectPtrPtr);
  53. }
  54. //-----------------------------------------------------------------------------
  55. void AObject::DisposeObject ()
  56. {
  57.  ::DisposeObject((Object *) this);
  58. }
  59. //-----------------------------------------------------------------------------
  60. void AObject::operator delete (void *object)
  61. {
  62.  ((AObject *) object)->DisposeObject();
  63. }
  64. //-----------------------------------------------------------------------------
  65. ULONG AObject::GetAttr (unsigned long attrID, ULONG *storagePtr)
  66. {
  67.  return ::GetAttr(attrID, (APTR) (Object *) this, storagePtr);
  68. }
  69. //-----------------------------------------------------------------------------
  70. ULONG AObject::SetAttrs (unsigned long tag1, ...)
  71. {
  72.  return SetAttrsA((TagItem *) &tag1);
  73. }
  74. //-----------------------------------------------------------------------------
  75. ULONG AObject::SetAttrsA (TagItem *tagList)
  76. {
  77.  return ::SetAttrsA((Object *) this, tagList);
  78. }
  79. //-----------------------------------------------------------------------------
  80. ULONG AObject::CallHook (Hook *hookPtr, unsigned long arg1, ...)
  81. {
  82.  return CallHookA(hookPtr, arg1? &arg1 : NULL);
  83. }
  84. //-----------------------------------------------------------------------------
  85. ULONG AObject::CallHookA (Hook *hookPtr, APTR message)
  86. {
  87.  return ::CallHookA(hookPtr, (Object *) this, message);
  88. }
  89. //-----------------------------------------------------------------------------
  90. ULONG AObject::DoMethod (unsigned long MethodID, ...)
  91. {
  92.  return DoMethodA((Msg) &MethodID);
  93. }
  94. //-----------------------------------------------------------------------------
  95. ULONG AObject::DoMethodA (Msg message)
  96. {
  97.  return ::DoMethodA((Object *) this, message);
  98. }
  99. //-----------------------------------------------------------------------------
  100. ULONG AObject::DoSuperMethod (IClass *cl, unsigned long MethodID, ...)
  101. {
  102.  return DoSuperMethodA(cl, (Msg) &MethodID);
  103. }
  104. //-----------------------------------------------------------------------------
  105. ULONG AObject::DoSuperMethodA (IClass *cl, Msg message)
  106. {
  107.  return ::DoSuperMethodA(cl, (Object *) this, message);
  108. }
  109. //-----------------------------------------------------------------------------
  110. ULONG AObject::CoerceMethod (IClass *cl, unsigned long MethodID, ...)
  111. {
  112.  return CoerceMethodA(cl, (Msg) &MethodID);
  113. }
  114. //-----------------------------------------------------------------------------
  115. ULONG AObject::CoerceMethodA (IClass *cl, Msg message)
  116. {
  117.  return ::CoerceMethodA(cl, (Object *) this, message);
  118. }
  119. //-----------------------------------------------------------------------------
  120. AObject * AObject::NewObject (const char *classID, unsigned long tag1, ...)
  121. {
  122.  return AObject::NewObjectA(classID, (TagItem *) &tag1);
  123. }
  124. //-----------------------------------------------------------------------------
  125. void * AObject::operator new (size_t, const char *classID, unsigned long tag1, ...)
  126. {
  127.  return AObject::NewObjectA(classID, (TagItem *) &tag1);
  128. }
  129. //-----------------------------------------------------------------------------
  130. AObject * AObject::NewObject (IClass *classPtr/*, UBYTE *classID*/, unsigned long tag1, ...)
  131. {
  132.  return AObject::NewObjectA(classPtr, (TagItem *) &tag1);
  133. }
  134. //-----------------------------------------------------------------------------
  135. void * AObject::operator new (size_t, IClass *classPtr/*, UBYTE *classID*/, unsigned long tag1, ...)
  136. {
  137.  return AObject::NewObjectA(classPtr, (TagItem *) &tag1);
  138. }
  139. //-----------------------------------------------------------------------------
  140. AObject * AObject::NewObjectA (const char *classID, TagItem *tagList)
  141. {
  142.  return (AObject *) ::NewObjectA(NULL, (UBYTE *) classID, tagList);
  143. }
  144. //-----------------------------------------------------------------------------
  145. void * AObject::operator new (size_t, const char *classID, TagItem *tagList)
  146. {
  147.  return AObject::NewObjectA(classID, tagList);
  148. }
  149. //-----------------------------------------------------------------------------
  150. AObject * AObject::NewObjectA (IClass *classPtr/*, UBYTE *classID*/, TagItem *tagList )
  151. {
  152.  return (AObject *) ::NewObjectA(classPtr, NULL, tagList);
  153. }
  154. //-----------------------------------------------------------------------------
  155. void * AObject::operator new (size_t, IClass *classPtr/*, UBYTE *classID*/, TagItem *tagList)
  156. {
  157.  return AObject::NewObjectA(classPtr, tagList);
  158. }
  159. //-----------------------------------------------------------------------------
  160. ULONG AObject::SetSuperAttrs (IClass *cl, unsigned long Tag1, ...)
  161. {
  162.  return DoSuperMethod(cl, OM_SET, (TagItem *) &Tag1, 0);
  163. }
  164.  
  165. #endif
  166.